home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Chat & Communication / Digsby build 37 / digsby_setup.exe / lib / yahoo / YahooConversation.pyo (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2008-10-13  |  7.5 KB  |  181 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. from common.Conversation import Conversation
  5. from util import dictadd, callsback
  6. from yahoo.yahoobuddy import YahooBuddy
  7. from yahoo.yahoolookup import ykeys
  8. from yahoo import yahooformat
  9. from logging import getLogger
  10. log = getLogger('yahoo.convo')
  11.  
  12. class YahooConvoBase(Conversation):
  13.     
  14.     def __init__(self, protocol):
  15.         Conversation.__init__(self)
  16.         self.__dict__.update(protocol = protocol, buddies = protocol.buddies, self_buddy = protocol.self_buddy)
  17.  
  18.     
  19.     def buddy_join(self, buddy):
  20.         self += self.room_list if buddy not in self.room_list else []
  21.         self.typing_status[buddy] = None
  22.  
  23.     
  24.     def buddy_leave(self, buddy):
  25.         if buddy in self.room_list:
  26.             self.room_list.remove(buddy)
  27.             del self.typing_status[buddy]
  28.         
  29.  
  30.     
  31.     def incoming_message(self, buddy, message, timestamp = None):
  32.         if not isinstance(buddy, YahooBuddy):
  33.             raise TypeError()
  34.         
  35.         message = yahooformat.tohtml(message.decode('utf-8', 'replace'))
  36.         message = newlines_to_brs(message)
  37.         self.typing_status[buddy] = None
  38.         if timestamp is None:
  39.             kws = { }
  40.         else:
  41.             kws = dict(timestamp = timestamp)
  42.         self.received_message(buddy, message, **kws)
  43.         Conversation.incoming_message(self)
  44.  
  45.     
  46.     def myname(self):
  47.         return self.self_buddy.name
  48.  
  49.     myname = property(myname)
  50.     
  51.     def send_typing_status(self, status = None):
  52.         pass
  53.  
  54.  
  55.  
  56. class YahooConvo(YahooConvoBase):
  57.     ischat = False
  58.     
  59.     def __init__(self, parent_protocol, buddy):
  60.         YahooConvoBase.__init__(self, parent_protocol)
  61.         self.buddy_join(parent_protocol.self_buddy)
  62.         self.buddy_join(buddy)
  63.         self.name = buddy.alias
  64.         self.to_from = {
  65.             '1': self.myname,
  66.             '5': buddy.name }
  67.  
  68.     
  69.     def _send_message(self, message, auto = False, callback = None, **options):
  70.         network_msg = message
  71.         format = options.get('format', None)
  72.         if format:
  73.             network_msg = yahooformat.format(format, network_msg)
  74.         
  75.         network_msg = network_msg.encode('utf-8')
  76.         d = {
  77.             ykeys['message']: network_msg,
  78.             ykeys['msg_encoding']: '1' }
  79.         import YahooProtocol
  80.         servicekey = YahooProtocol.PROTOCOL_CODES.get(self.buddy.service, None)
  81.         if servicekey is not None:
  82.             d[ykeys['buddy_service']] = servicekey
  83.         
  84.         log.info('Sending message to %r. buddy_service=%r', self.buddy, self.buddy.service == 'msn')
  85.         
  86.         try:
  87.             self.protocol.send('message', 'offline', dictadd(self.to_from, d))
  88.         except Exception:
  89.             e = None
  90.             callback.error(e)
  91.  
  92.         callback.success()
  93.  
  94.     _send_message = callsback(_send_message)
  95.     
  96.     def self_buddy(self):
  97.         return self.protocol.self_buddy
  98.  
  99.     self_buddy = property(self_buddy)
  100.     
  101.     def send_typing_status(self, status = None):
  102.         typing_now = status == 'typing'
  103.         None(log.debug, 'sending %styping' if not typing_now else '')
  104.         None(self.protocol.send, 'notify', [
  105.             'typing',
  106.             'typing_status',
  107.             'TYPING',
  108.             'frombuddy',
  109.             self.self_buddy.name,
  110.             'message',
  111.             '',
  112.             'flag' if typing_now else '0',
  113.             'to',
  114.             self.buddy.name])
  115.  
  116.     
  117.     def exit(self):
  118.         self.protocol.exit_conversation(self)
  119.  
  120.     
  121.     def __repr__(self):
  122.         return '<%s with %s from %s>' % (self.__class__.__name__, self.buddy, self.protocol.username)
  123.  
  124.  
  125.  
  126. class YahooConf(YahooConvoBase):
  127.     ischat = True
  128.     
  129.     def __init__(self, parent_protocol, name):
  130.         YahooConvoBase.__init__(self, parent_protocol)
  131.         self.name = name
  132.  
  133.     
  134.     def invite(self, buddy, message = None):
  135.         bname = getattr(buddy, 'name', buddy)
  136.         self.protocol.invite_to_conference(self.name, bname, message)
  137.  
  138.     
  139.     def _send_message(self, message):
  140.         users = []
  141.         _[1]
  142.         self.received_message(self.protocol.self_buddy, message)
  143.  
  144.     
  145.     def exit(self):
  146.         self.protocol.send('conflogoff', 'available', frombuddy = self.self_buddy.name, conf_name = self.name)
  147.  
  148.     
  149.     def __repr__(self):
  150.         return '<YahooConf %s (%d members)>' % (self.name, len(self.room_list))
  151.  
  152.  
  153.  
  154. class YahooChat(YahooConvoBase):
  155.     
  156.     def __init__(self, parent_protocol, name = 'Yahoo Chat', topic = ''):
  157.         YahooConvoBase.__init__(self, parent_protocol)
  158.         self.name = name
  159.         self.topic = topic
  160.  
  161.     
  162.     def _send_message(self, message):
  163.         log.info_s('send_message for %r: %s', self, message)
  164.         self.protocol.send('comment', 'available', dictadd(dict(frombuddy = self.myname, room_name = self.name, chat_message = message), {
  165.             '124': '1' }))
  166.  
  167.     
  168.     def exit(self):
  169.         log.info('YahooChat exit: sending chatlogout_available')
  170.         self.protocol.send('chatlogout', 'available', frombuddy = self.myname)
  171.  
  172.     
  173.     def __repr__(self):
  174.         return '<YahooChat %s (%d members, topic: %s)' % (self.name, len(self.room_list), self.topic)
  175.  
  176.  
  177.  
  178. def newlines_to_brs(s, br = '<br />'):
  179.     return s.replace('\r\n', '\n').replace('\n', br).replace('\r', br)
  180.  
  181.